//
// Created by 16933 on 2022/5/2.
//

#ifndef BALANCECAR_BSP_MOTOR_H
#define BALANCECAR_BSP_MOTOR_H
#include "stdint.h"
#define FILTER_BUF        4       //累计几次产生一次速度
#define PULSE_ONE_LAP     500.0     //一圈产生500个脉冲
#define DELAT_T           5.0       //计算周期是5ms
#define SPEED_MAX         360     //rpm
typedef struct
{
    uint16_t ecd;                   //电机的编码器数值
    uint16_t last_ecd;              //上一次电机的编码器数值
    float  speed_rpm;               // rpm/60000*50  即毫秒脉冲数*10
    int32_t  round_cnt;             //电机旋转的总圈数
    int32_t  total_ecd;             //电机旋转的总编码器数值
    int32_t  total_angle;           //电机旋转的总角度
    int32_t total_ecd_last;
    int32_t total_ecd_delta;
    int32_t ecd_raw_rate;           //速度计算中间值
    int32_t  rate_buf[FILTER_BUF];  //多次取值取平均来计算速度
    uint8_t  buf_cut;
    uint32_t filter_rate;           //多次计算去平均过滤后的速度
    int32_t temp_sum;
}motor_measure_t;


void encoder_reset(motor_measure_t *ptr);
int encoder_filter(int encoder_left,int encoder_right);
void encoder_data_handle(motor_measure_t *ptr ,uint16_t data);
#endif //BALANCECAR_BSP_MOTOR_H
